banner广告
简介
在内容底部或顶部显示的小条形广告。不应将Banner广告放置于文本、图片和应用的其他可点击部分,避免误点。
注意事项
①需要确保在SDK初始化成功后再进行广告请求,否则可能导致广告请求加载失败。
②需要初始化时配置广告基本信息。例如期望尺寸,为避免渲染过程产生广告视图形变,务必和媒体平台配置相同尺寸。通过设置CloooudMNativeExpressBannerViewDelegate代理,获取广告、展示、点击、关闭等回调。值得注意的是一定要设置rootViewController,即跳转落地页需要的viewController。
③在广告接入前需要明确各ADN对应聚合广告样式情况,以确保正确完成广告接入,避免由于广告类型不匹配导致接入报错等情况的发生。
④由于各广告平台对于包名校验规则不同,需确保在媒体平台填写的包名符合各adn平台规范,避免由于包名校验不匹配导致的无广告返回情况的产生。
⑤聚合维度广告是通过广告位ID发起广告请求的,切记不要使用混淆;
接入banner广告
// 创建广告对象
- (void)p_buildAd {
self.bannerView = [[CloooudNativeExpressBannerView alloc] initWithSlotID:slotID rootViewController:self adSize:size]; // 聚合维度通过广告位ID发起请求;
self.bannerView.frame = CGRectMake((self.view.width - size.width) / 2.0, self.view.height - size.height - bottom, size.width, size.height);
self.bannerView.delegate = self;
}
// 触发广告加载
- (void)p_loadAdData {
[self.bannerView loadAdData];
}
// 聚合维度收到load成功回调后展示
#pragma CloooudMNativeExpressBannerViewDelegate
- (void)nativeExpressBannerAdViewDidLoad:(CloooudNativeExpressBannerView *)bannerAdView {
[self.view addSubview:self.bannerView];
}
Banner混出信息流广告
混出自渲染信息流时需在nativeExpressBannerAdNeedLayoutUI:canvasView: 回调中实现UI布局,请求、展示广告流程同Banner广告接入流程相同。
- (void)nativeExpressBannerAdNeedLayoutUI:(CloooudNativeExpressBannerView *)bannerAd canvasView:(CloooudMCanvasView *)canvasView {
// 仅在使用自渲染混出时会回调这个方法
// 开发者需在该方法中实现UI渲染
// 从canvasView中获取UI展示的数据,创建UI控件,添加到canvasView中
}
获取展示后广告信息示例
在收到展示回调Visible后访问可获取到正确信息
- (void)logAdInfoAfterShow {
CloooudMRitInfo *info = [self.bannerView.mediation getShowEcpmInfo];
// 展示后可获取信息如下
NSLog(@"ecpm:%@", info.ecpm); // 单位:分
NSLog(@"platform:%@", info.adnName);
NSLog(@"ritID:%@", info.slotID);
NSLog(@"requestID:%@", info.requestID ?: @"None");
NSLog(@"getAdLoadInfoList:%@", [self.bannerView.mediation getAdLoadInfoList]);
}
接口及回调说明
CloooudNativeExpressBannerView说明
方法 | 说明 |
---|---|
@property (nonatomic, weak, nullable) id |
banner广告协议,聚合维度使用CloooudMNativeExpressBannerViewDelegate |
@property (nonatomic, assign, readonly) NSInteger interval; | 轮播时间间隔;30-120s之间 聚合维度不支持此场景,需在媒体平台瀑布流属性设置模块进行设置 |
@property (nonatomic, copy, readonly) CloooudDictionary *mediaExt; | 配置参数 |
- (instancetype)initWithSlotID:(NSString )slotID rootViewController:(UIViewController )rootViewController adSize:(CGSize)adsize; | slotID:广告位ID rootViewController:展示广告根视图 adSize:广告尺寸设置 |
-rootViewController:(UIViewController *)rootViewController adSize:(CGSize)adsize interval (NSInteger)interval; | slotID:广告位ID rootViewController:展示广告根视图 adSize:广告尺寸设置 interval 轮播间隔 聚合维度不支持 |
- (instancetype)initWithSlot:(CloooudAdSlot )slot rootViewController:(UIViewController )rootViewController adSize:(CGSize)adsize; | slot:广告对象 rootViewController:展示广告根视图 adSize:广告尺寸设置 |
- (instancetype)initWithSlot:(CloooudAdSlot )slot rootViewController:(UIViewController )rootViewController adSize:(CGSize)adsize interval:(NSInteger)interval; | slot:广告对象rootViewController:展示广告根视图 adSize:广告尺寸设置 interval:轮播间隔 聚合维度不支持 |
- (void)loadAdData; | 加载广告 |
- (NSString *)getAdCreativeToken; | 物料ID 聚合维度不支持 |
@property (nonatomic, strong, nullable, readonly) CloooudNativeExpressBannerViewMediation *mediation; | 当使用聚合广告位时,存在该属性,可获取聚合维度相关功能 |
CloooudNativeExpressBannerViewMediationProtocol说明
方法 | 说明 |
---|---|
@property (nonatomic, assign, readonly) NSInteger refreshTime; | 平台设置的Banner轮播时间间隔, 范围[10, 180], 其他值按0处理, 默认为0,单位秒 |
@property (nonatomic, assign, readonly) BOOL isReady; | 是否已经准备广告展示,理论上在广告加载回调后即为YES,但受一些因素的影响(例如广告失效),可能为NO。建议在广告展示前调用该方法进行是否可以展示 |
- (void)destory; | 不再使用加载成功后回调的view时,可调用该方法释放占用的内存 |
- (nullable CloooudMRitInfo *)getShowEcpmInfo; | 返回显示广告对应的披露信息 |
- (NSArray<CloooudMRitInfo > )cacheRitList; | 填充后可调用, 返回广告缓存池内所有信息;nil为无权限 |
@property (nonatomic, assign, readonly) BOOL isLoading; | 广告是否加载中 |
- (void)addParam:(id)param withKey:(NSString *)key; | 添加参数 param 参数值 key 参数key |
- (NSArray<CloooudMAdLoadInfo > )getAdLoadInfoList; | 一次waterfall中各adn代码位加载广告失败原因,建议调用时机:展示广告时/超时时/全部返回报错时;返回nil表示一次加载无代码位加载失败或其加载无响应 |
CloooudNativeExpressBannerViewDelegate说明
方法 | 说明 |
---|---|
- (void)nativeExpressBannerAdViewDidLoad:(CloooudNativeExpressBannerView *)bannerAdView; | 广告加载成功 |
- (void)nativeExpressBannerAdView:(CloooudNativeExpressBannerView )bannerAdView didLoadFailWithError:(NSError _Nullable)error; | 广告加载失败 |
- (void)nativeExpressBannerAdViewRenderSuccess:(CloooudNativeExpressBannerView *)bannerAdView; | 广告渲染成功 |
- (void)nativeExpressBannerAdViewRenderFail:(CloooudNativeExpressBannerView )bannerAdView error:(NSError __nullable)error; | 广告渲染失败 |
- (void)nativeExpressBannerAdViewWillBecomVisible:(CloooudNativeExpressBannerView *)bannerAdView; | 广告即将展示 |
- (void)nativeExpressBannerAdViewDidClick:(CloooudNativeExpressBannerView *)bannerAdView; | 广告点击回调 |
- (void)nativeExpressBannerAdView:(CloooudNativeExpressBannerView )bannerAdView dislikeWithReason:(NSArray<CloooudDislikeWords > *_Nullable)filterwords; | dislike原因 |
- (void)nativeExpressBannerAdViewDidCloseOtherController:(CloooudNativeExpressBannerView *)bannerAdView interactionType:(CloooudInteractionType)interactionType; | 此方法在另一个控制器关闭时调用。 |
interactionType:在app中打开appstore或打开网页或查看视频广告详情页面。 | |
- (void)nativeExpressBannerAdViewDidRemoved:(CloooudNativeExpressBannerView *)bannerAdView; | 强制删除广告视图 |
CloooudMNativeExpressBannerViewDelegate说明
方法 | 说明 |
---|---|
- (void)nativeExpressBannerAdViewDidBecomeVisible:(CloooudNativeExpressBannerView *)bannerAdView; | 广告展示回调 |
- (void)nativeExpressBannerAdNeedLayoutUI:(CloooudNativeExpressBannerView )bannerAd canvasView:(CloooudMCanvasView )canvasView; | 广告加载成功后为「混用的信息流自渲染广告」时会触发该回调,提供给开发者自渲染的时机 bannerAd 广告操作对象 canvasView 携带物料的画布,需要对其内部提供的物料及控件做布局及设置UI |
轮播开启时,每次轮播到自渲染广告均会触发该回调,并且canvasView为其他回调中bannerView的子控件 |
完整接入示例代码
- (void)loadBannerAd {
// 先去除上次展示的广告
[self.bannerView removeFromSuperview];
// 重新配置广告并加载
CGSize adSize = CGSizeMake(375, 150); // 根据实际情况设置广告尺寸大小
CloooudAdSlot *slot = [[CloooudAdSlot alloc] init];
slot.ID = @"102303353"; // 聚合维度通过广告位ID发起请求;
CloooudNativeExpressBannerView *bannerView = [[CloooudNativeExpressBannerView alloc] initWithSlot:slot rootViewController:self adSize:adSize];
bannerView.delegate = self;
self.bannerView = bannerView;
[self.bannerView loadAdData];
}
/******** Banner广告回调处理 *********/
#pragma CloooudMNativeExpressBannerViewDelegate
// 广告加载成功
- (void)nativeExpressBannerAdViewDidLoad:(CloooudNativeExpressBannerView *)bannerAdView {
// 广告加载成功之后,可以调用展示方法,按照实际需要调整代码位置
[self.view addSubview:bannerAdView];
}
// 广告加载失败
- (void)nativeExpressBannerAdView:(CloooudNativeExpressBannerView *)bannerAdView didLoadFailWithError:(NSError *)error {
}
// 广告已经展示
- (void)nativeExpressBannerAdViewDidBecomeVisible:(CloooudNativeExpressBannerView *)bannerAdView {
/*
// (注意: getShowEcpmInfo 需要在当前广告展示之后调用, 展示之前调用该方法会返回 nil)
CloooudMRitInfo *info = [bannerAdView.mediation getShowEcpmInfo];
NSLog(@"ecpm:%@", info.ecpm);
NSLog(@"platform:%@", info.adnName);
NSLog(@"ritID:%@", info.slotID);
NSLog(@"requestID:%@", info.requestID ?: @"None");
*/
}
// 广告被点击
- (void)nativeExpressBannerAdViewDidClick:(CloooudNativeExpressBannerView *)bannerAdView {
}
// 用户选择了负反馈信息
- (void)nativeExpressBannerAdView:(CloooudNativeExpressBannerView *)bannerAdView dislikeWithReason:(NSArray<CloooudDislikeWords *> *)filterwords {
}
// 广告视图被移除
- (void)nativeExpressBannerAdViewDidRemoved:(CloooudNativeExpressBannerView *)nativeExpressAdView {
}
- (void)nativeExpressBannerAdNeedLayoutUI:(CloooudNativeExpressBannerView *)bannerAd canvasView:(CloooudMCanvasView *)canvasView {
// 仅在使用自渲染混出时会回调这个方法
// 开发者需在该方法中实现UI渲染
// 从canvasView中获取UI展示的数据,创建UI控件,添加到canvasView中
}
详细接入可参照demo。